package schema

import (
	"github.com/LyricTian/gin-admin/v7/internal/lib/pay"
	"time"
)

// Order 订单管理对象
type Order struct {
	ID           string    `json:"id"`                                      // 唯一标识
	UserId       string    `json:"user_id" binding:"required"`              // 用户ID
	OutOrderId   string    `json:"out_order_id" binding:"required"`         // 外部订单ID
	InterOrderId string    `json:"inter_order_id" binding:"required"`       // 内部订单ID
	PayType      int       `json:"pay_type" binding:"required,max=2,min=1"` // 支付类型(1:微信支付 2:支付宝)
	Type         int       `json:"type" binding:"required,max=2,min=1"`     // 类型(1:奉献 2:惩罚)
	Money        int       `json:"money" binding:"required"`                // 金额
	Memo         string    `json:"memo"`                                    // 支付说明
	Status       int       `json:"status" binding:"required,max=3,min=1"`   // 支付状态(1:支付中 2:支付成功 3:支付失败)
	Creator      string    `json:"creator"`                                 // 创建者
	CreatedAt    time.Time `json:"created_at"`                              // 创建时间
	UpdatedAt    time.Time `json:"updated_at"`                              // 更新时间
}

// OrderUpdate 订单管理对象
type OrderUpdate struct {
	ID           string    `json:"id"`                                       // 唯一标识
	UserId       string    `json:"user_id" binding:"omitempty"`              // 用户ID
	OutOrderId   string    `json:"out_order_id" binding:"omitempty"`         // 外部订单ID
	InterOrderId string    `json:"inter_order_id" binding:"omitempty"`       // 内部订单ID
	PayType      int       `json:"pay_type" binding:"omitempty,max=2,min=1"` // 支付类型(1:微信支付 2:支付宝)
	Type         int       `json:"type" binding:"omitempty,max=2,min=1"`     // 类型(1:奉献 2:惩罚)
	Money        int       `json:"money" binding:"omitempty"`                // 金额
	Memo         string    `json:"memo"`                                     // 支付说明
	Status       int       `json:"status" binding:"omitempty,max=3,min=1"`   // 支付状态(1:支付中 2:支付成功 3:支付失败)
	Creator      string    `json:"creator"`                                  // 创建者
	CreatedAt    time.Time `json:"created_at"`                               // 创建时间
	UpdatedAt    time.Time `json:"updated_at"`                               // 更新时间
}

func (a *OrderUpdate) ToOrder() *Order {
	return &Order{
		ID:           a.ID,
		UserId:       a.UserId,
		OutOrderId:   a.OutOrderId,
		InterOrderId: a.InterOrderId,
		PayType:      a.PayType,
		Type:         a.Type,
		Money:        a.Money,
		Memo:         a.Memo,
		Status:       a.Status,
		Creator:      a.Creator,
		CreatedAt:    a.CreatedAt,
		UpdatedAt:    a.UpdatedAt,
	}
}

// OrderQueryParam 查询条件
type OrderQueryParam struct {
	PaginationParam
	UserId       string `form:"user_id"`        // 用户ID
	OutOrderId   string `form:"out_order_id"`   // 外部订单ID
	InterOrderId string `form:"inter_order_id"` // 内部订单ID
	PayType      int    `form:"pay_type"`       // 支付类型(1:微信支付 2:支付宝)
	Type         int    `form:"type"`           // 类型(1:奉献 2:惩罚)
	Money        int    `form:"money"`          // 金额
	Status       int    `form:"status"`         // 支付状态(1:支付中 2:支付成功 3:支付失败)
	Creator      string `form:"creator"`        // 创建者

}

// OrderQueryOptions 查询可选参数项
type OrderQueryOptions struct {
	OrderFields []*OrderField // 排序字段
}

// OrderQueryResult 查询结果
type OrderQueryResult struct {
	Data       Orders
	PageResult *PaginationResult
}

// Orders 订单管理列表
type Orders []*Order

type Notify pay.Notify